package com.jeesite.modules.ocr.front;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.jeesite.common.config.Global;
import com.jeesite.common.web.BaseController;
import com.jeesite.modules.ocr.entity.OcrAlgorithmConfig;
import com.jeesite.modules.ocr.entity.OcrTemplate;
import com.jeesite.modules.ocr.service.OcrAlgorithmConfigService;
import com.jeesite.modules.ocr.service.OcrTempateCategoryService;
import com.jeesite.modules.ocr.service.OcrTemplateService;


import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

@RestController
@RequestMapping(value = "${frontPath}/v2")
@Api(tags = "OCR检索公共接口")
public class OcrSearchController extends BaseController {
	@Autowired
	private OcrAlgorithmConfigService ocrAlgorithmConfigService;
	@Autowired
	private OcrTemplateService ocrTemplateService;
	@Autowired
	private OcrTempateCategoryService ocrTempateCategoryService;

	@PostMapping("/templateCheck")
	@ApiOperation(value = "OCR 模板校验")
	public String templateCheck(@RequestParam("file") MultipartFile file,
			@RequestParam(value = "templateId", defaultValue = "0")  String templateId, Model model) {
		// 所有的模板
		List<OcrTemplate> listOcrTemplate = ocrTemplateService.findList(new OcrTemplate());
		// 获取配置的信息
		OcrAlgorithmConfig ocrAlgorithmConfig = ocrAlgorithmConfigService
				.get(listOcrTemplate.get(0).getOcrAlgorithmConfig());
		model.addAttribute("listOcrTemplate", listOcrTemplate);
		model.addAttribute("listOcrTempateConfigs", listOcrTemplate.get(0).getOcrTempateConfigsList());
		model.addAttribute("ocrAlgorithmConfig", ocrAlgorithmConfig);
		//https://jeesite.com/docs/views-beetl/#fileupload-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0
		//JeeSite upload 组件接口https://gitee.com/thinkgem/jeesite5/attach_files/249363/download
		//oss 接口https://jeesite.com/docs/oss-client/#%E7%AE%80%E4%BB%8B
//		还请参照此控件自己实现上传UI即可，参照方法： 浏览器 F12 打开 network 监控，监控请求路径及数据，共分为 2 次请求：
//		第一次发送文件的 MD5 码（前后10M部分，不足10M取全部），后台返回 result 结果； 生成 MD5 的方法，请参见工具类：Md5Utils.md5File(file, 0, 10 * 1024 * 1024);
//		result 为 true，则代表已经上传过，并返回 fileUpload 数据，并放到 bizType 命名的隐藏域中；
//		result 为 false，则待办未上传过，还请您根据 F12 监控到的数据，需要您第二次发送上传文件请求；
//		提交表单时，请将 bizType 隐藏域和 bizType__del 隐藏域提交到后台；（重要）
//		后台通过 FileUplandUtils 接受到该值并文件与当前表单主键建立关系。
//		接口测试（可以导入Postman）：https://gitee.com/thinkgem/jeesite5/attach_files/249363/download(opens new window)
//		推荐使用 Apifox 接口工具：https://www.apifox.cn
		//model.addAttribute("ocrKit", AIKitsOCRUtils.aiKitOCR(OCRAPI.增值税发票识别, "123", json));		
		if ("0".equals(templateId)) {
			model.addAttribute("自定义对象", "自定义内容");
			return renderResult(Global.FALSE, text("图片OCR解析失败！"), model);
		}else {
			return renderResult(Global.TRUE, text("图片OCR解析成功！"), model);
		}
	}
	
	@PostMapping("/templateCheck")
	@ApiOperation(value = "多OCR 模板校验")
	public String templatesCheck(@RequestParam("file") MultipartFile file,
			@RequestParam(value = "templateId", defaultValue = "0")  String templateIds, Model model) {
		// 所有的模板
		List<OcrTemplate> listOcrTemplate = ocrTemplateService.findList(new OcrTemplate());
		// 获取配置的信息
		OcrAlgorithmConfig ocrAlgorithmConfig = ocrAlgorithmConfigService
				.get(listOcrTemplate.get(0).getOcrAlgorithmConfig());
		model.addAttribute("listOcrTemplate", listOcrTemplate);
		model.addAttribute("listOcrTempateConfigs", listOcrTemplate.get(0).getOcrTempateConfigsList());
		model.addAttribute("ocrAlgorithmConfig", ocrAlgorithmConfig);
		//https://jeesite.com/docs/views-beetl/#fileupload-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0
		//JeeSite upload 组件接口https://gitee.com/thinkgem/jeesite5/attach_files/249363/download
		//oss 接口https://jeesite.com/docs/oss-client/#%E7%AE%80%E4%BB%8B
//		还请参照此控件自己实现上传UI即可，参照方法： 浏览器 F12 打开 network 监控，监控请求路径及数据，共分为 2 次请求：
//		第一次发送文件的 MD5 码（前后10M部分，不足10M取全部），后台返回 result 结果； 生成 MD5 的方法，请参见工具类：Md5Utils.md5File(file, 0, 10 * 1024 * 1024);
//		result 为 true，则代表已经上传过，并返回 fileUpload 数据，并放到 bizType 命名的隐藏域中；
//		result 为 false，则待办未上传过，还请您根据 F12 监控到的数据，需要您第二次发送上传文件请求；
//		提交表单时，请将 bizType 隐藏域和 bizType__del 隐藏域提交到后台；（重要）
//		后台通过 FileUplandUtils 接受到该值并文件与当前表单主键建立关系。
//		接口测试（可以导入Postman）：https://gitee.com/thinkgem/jeesite5/attach_files/249363/download(opens new window)
//		推荐使用 Apifox 接口工具：https://www.apifox.cn
		//model.addAttribute("ocrKit", AIKitsOCRUtils.aiKitOCR(OCRAPI.增值税发票识别, "123", json));		
		if ("0".equals(templateIds)) {
			model.addAttribute("自定义对象", "自定义内容");
			return renderResult(Global.FALSE, text("图片OCR解析失败！"), model);
		}else {
			return renderResult(Global.TRUE, text("图片OCR解析成功！"), model);
		}
	}
	
	
	@PostMapping("/templateOcrTempateCategoryCheck")
	@ApiOperation(value = "OCR 模板分类校验")
	public String templateOcrTempateCategoryCheck(@RequestParam("file") MultipartFile file,
			@RequestParam(value = "templateId", defaultValue = "0")  String templateId,String isSub, Model model) {
		// 所有的模板
		List<OcrTemplate> listOcrTemplate = ocrTemplateService.findList(new OcrTemplate());
		// 获取配置的信息
		OcrAlgorithmConfig ocrAlgorithmConfig = ocrAlgorithmConfigService
				.get(listOcrTemplate.get(0).getOcrAlgorithmConfig());
		model.addAttribute("listOcrTemplate", listOcrTemplate);
		model.addAttribute("listOcrTempateConfigs", listOcrTemplate.get(0).getOcrTempateConfigsList());
		model.addAttribute("ocrAlgorithmConfig", ocrAlgorithmConfig);
		//https://jeesite.com/docs/views-beetl/#fileupload-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0
		//JeeSite upload 组件接口https://gitee.com/thinkgem/jeesite5/attach_files/249363/download
		//oss 接口https://jeesite.com/docs/oss-client/#%E7%AE%80%E4%BB%8B
//		还请参照此控件自己实现上传UI即可，参照方法： 浏览器 F12 打开 network 监控，监控请求路径及数据，共分为 2 次请求：
//		第一次发送文件的 MD5 码（前后10M部分，不足10M取全部），后台返回 result 结果； 生成 MD5 的方法，请参见工具类：Md5Utils.md5File(file, 0, 10 * 1024 * 1024);
//		result 为 true，则代表已经上传过，并返回 fileUpload 数据，并放到 bizType 命名的隐藏域中；
//		result 为 false，则待办未上传过，还请您根据 F12 监控到的数据，需要您第二次发送上传文件请求；
//		提交表单时，请将 bizType 隐藏域和 bizType__del 隐藏域提交到后台；（重要）
//		后台通过 FileUplandUtils 接受到该值并文件与当前表单主键建立关系。
//		接口测试（可以导入Postman）：https://gitee.com/thinkgem/jeesite5/attach_files/249363/download(opens new window)
//		推荐使用 Apifox 接口工具：https://www.apifox.cn
		//model.addAttribute("ocrKit", AIKitsOCRUtils.aiKitOCR(OCRAPI.增值税发票识别, "123", json));		
		if ("0".equals(templateId)) {
			model.addAttribute("自定义对象", "自定义内容");
			return renderResult(Global.FALSE, text("图片OCR解析失败！"), model);
		}else {
			return renderResult(Global.TRUE, text("图片OCR解析成功！"), model);
		}
	}
	

	@PostMapping("/templateOcrTempateCategorysCheck")
	@ApiOperation(value = "OCR 模板指定多分类校验")
	public String templateOcrTempateCategorysCheck(@RequestParam("file") MultipartFile file,
			@RequestParam(value = "templateId", defaultValue = "0")  String templateId,String isSub, Model model) {
		// 所有的模板
		List<OcrTemplate> listOcrTemplate = ocrTemplateService.findList(new OcrTemplate());
		// 获取配置的信息
		OcrAlgorithmConfig ocrAlgorithmConfig = ocrAlgorithmConfigService
				.get(listOcrTemplate.get(0).getOcrAlgorithmConfig());
		model.addAttribute("listOcrTemplate", listOcrTemplate);
		model.addAttribute("listOcrTempateConfigs", listOcrTemplate.get(0).getOcrTempateConfigsList());
		model.addAttribute("ocrAlgorithmConfig", ocrAlgorithmConfig);
		//https://jeesite.com/docs/views-beetl/#fileupload-%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0
		//JeeSite upload 组件接口https://gitee.com/thinkgem/jeesite5/attach_files/249363/download
		//oss 接口https://jeesite.com/docs/oss-client/#%E7%AE%80%E4%BB%8B
//		还请参照此控件自己实现上传UI即可，参照方法： 浏览器 F12 打开 network 监控，监控请求路径及数据，共分为 2 次请求：
//		第一次发送文件的 MD5 码（前后10M部分，不足10M取全部），后台返回 result 结果； 生成 MD5 的方法，请参见工具类：Md5Utils.md5File(file, 0, 10 * 1024 * 1024);
//		result 为 true，则代表已经上传过，并返回 fileUpload 数据，并放到 bizType 命名的隐藏域中；
//		result 为 false，则待办未上传过，还请您根据 F12 监控到的数据，需要您第二次发送上传文件请求；
//		提交表单时，请将 bizType 隐藏域和 bizType__del 隐藏域提交到后台；（重要）
//		后台通过 FileUplandUtils 接受到该值并文件与当前表单主键建立关系。
//		接口测试（可以导入Postman）：https://gitee.com/thinkgem/jeesite5/attach_files/249363/download(opens new window)
//		推荐使用 Apifox 接口工具：https://www.apifox.cn
		//model.addAttribute("ocrKit", AIKitsOCRUtils.aiKitOCR(OCRAPI.增值税发票识别, "123", json));		
		if ("0".equals(templateId)) {
			model.addAttribute("自定义对象", "自定义内容");
			return renderResult(Global.FALSE, text("图片OCR解析失败！"), model);
		}else {
			return renderResult(Global.TRUE, text("图片OCR解析成功！"), model);
		}
	}
	
}
